package com.vitamo.dao.Utilisateur;

import java.util.Arrays;
import java.util.List;
import java.util.Vector;

import javax.jdo.Query;

import javax.jdo.PersistenceManager;


import com.vitamo.Beans.InfoUtilisateurB;
import com.vitamo.Beans.UtilisateurB;
import com.vitamo.dao.PMF;

public class GestionUtilisateur {
	
	private PersistenceManager pm;

	public GestionUtilisateur() {
		super();
		 pm = PMF.get().getPersistenceManager();

	}
	public boolean addUtilisateur(Utilisateur U){
		try {
			pm.makePersistent(U);
			return true;
		} catch (Exception e) {
			System.out.println(e.getMessage());
			return false;
		}
		
	}
	public boolean CreerUtilisateur(String username,String pwd,String type,String nom,String prenom,String adress,String email,String numt,String numf,String nump){
		InfoUtilisateur i=new InfoUtilisateur(nom,prenom ,adress,email,numt,numf,nump);
		Utilisateur U=new Utilisateur(username,pwd,type,false, i);
		return this.addUtilisateur(U);
	}
	public Utilisateur getUtilisateur(String key){
		Utilisateur U=null,U1=null;
		
		try {
			U=pm.getObjectById(Utilisateur.class,key);
			U1=pm.detachCopy(U);
			return U1;
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
			return null;
		}
	}
	public Boolean updateAll(List<UtilisateurB> l){
		if(!l.isEmpty()){
			for (UtilisateurB u : l) {
				if (!upDate(u)) {return false;}
			}
			return true;
		}
		else{
			return false;
		}
	}
	public Boolean upDate(UtilisateurB up){
		Utilisateur U=null;
		Utilisateur U2=null;
		try {
			U=pm.getObjectById(Utilisateur.class,up.getUsername());
			if (U != null) {
				InfoUtilisateurB tmp=up.getInfo();
                InfoUtilisateur tmpB=new InfoUtilisateur(tmp.getNom(),tmp.getPrenom(),tmp.getAdresse(),tmp.getEmail(),tmp.getNumT(),tmp.getNumF(),tmp.getNumP());
                U2=new Utilisateur(up.getUsername(),up.getPwd(),up.getType(),up.getStatu(),tmpB);
               
				pm.makePersistent(U2);
				return true;
			}else {
				return false;
			}
		} catch (Exception e) {
			System.out.println("Errue upDate"+e.getMessage());
			return false;
		}
	}
	public List<UtilisateurB> selectAll(){
		List<UtilisateurB> m=null;
		try {
			Query query = pm.newQuery(Utilisateur.class);
			List<Utilisateur> results=null;
			results=(List<Utilisateur>)query.execute();
		 if (!results.isEmpty()) {
        	   m=new Vector<UtilisateurB>();
        	    for (Utilisateur u : results) {
                   InfoUtilisateur tmp= u.getInfo();
                   InfoUtilisateurB tmpB=new InfoUtilisateurB(tmp.getNom(),tmp.getPrenom(),tmp.getAdresse(),tmp.getEmail(),tmp.getNumT(),tmp.getNumF(),tmp.getNumP());
                   UtilisateurB ub=new UtilisateurB(u.getUsername(),u.getPwd(),u.getType(),u.getStatu(),tmpB);
                   m.add(ub);}} else { return m;} 
          return m;
		} catch (Exception e) {
			System.out.println("Erreur GU :"+e.getMessage());
			return null;
		}
	}
	public List<UtilisateurB> rechercher(String key){
		List<UtilisateurB> m=null;
		try {
			Query query = pm.newQuery(Utilisateur.class);
			//set filter
			query.setFilter("username == Param");
		    query.setOrdering("hireDate desc");
		    query.declareParameters("String Param");

			List<Utilisateur> results=null;
			results=(List<Utilisateur>)query.execute("%"+key+"%");
		 if (!results.isEmpty()) {
        	   m=new Vector<UtilisateurB>();
        	    for (Utilisateur u : results) {
                   InfoUtilisateur tmp= u.getInfo();
                   InfoUtilisateurB tmpB=new InfoUtilisateurB(tmp.getNom(),tmp.getPrenom(),tmp.getAdresse(),tmp.getEmail(),tmp.getNumT(),tmp.getNumF(),tmp.getNumP());
                   UtilisateurB ub=new UtilisateurB(u.getUsername(),u.getPwd(),u.getType(),u.getStatu(),tmpB);
                   m.add(ub);}} else { return m;} 
          return m;
		} catch (Exception e) {
			System.out.println("Erreur GU :"+e.getMessage());
			return null;
		}
	}
	public boolean exist(String name){
		if(getUtilisateur(name)!=null){
			return true;
		}
		else{
			return false;
		}
	}
	public Utilisateur Connect(String name,String pwd){
			Utilisateur U=null,U1=null;
		
		try {
			
			U=pm.getObjectById(Utilisateur.class,name);
			U1=pm.detachCopy(U);
			if (U1!=null) {
				if (U1.getPwd().equals(pwd)) {
					return U1;
				} else {
					//pm.close();
					return null;
				}	
			} else {
				return null;
			}
			
			
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
			return null;
		}
	}
}
